home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / term / term41source.lha / Extras / Source / term-Source.lha / PhonePanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-07  |  50.5 KB  |  2,280 lines

  1. /*
  2. **    PhonePanel.c
  3. **
  4. **    The phonebook and support routines
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12.     /* Gadget IDs. */
  13.  
  14. enum    {    GAD_NAMELIST,        GAD_EDIT,
  15.         GAD_NAME,        GAD_COMMENT,        GAD_PHONENUMBER,    GAD_QUICKMENU,
  16.         GAD_NEWENTRY,        GAD_DIALLIST,        GAD_LOADLIST,        GAD_COPYCONFIG,
  17.         GAD_CLONEENTRY,        GAD_CLEARLIST,        GAD_SORTLIST,        GAD_PASSWORD,
  18.         GAD_REMOVEENTRY,    GAD_USEIT,        GAD_SAVELIST,        GAD_PRINT,
  19.         GAD_TAG,        GAD_UNTAG,        GAD_TAG_ALL,        GAD_TOGGLE_ALL,
  20.         GAD_CANCEL
  21.     };
  22.  
  23.     /* Editing IDs. */
  24.  
  25. enum    {    EDIT_SERIAL,        EDIT_MODEM,        EDIT_SCREEN,        EDIT_TERMINAL,
  26.         EDIT_EMULATION,        EDIT_CLIPBOARD,        EDIT_CAPTURE,        EDIT_COMMANDS,
  27.         EDIT_MISC,        EDIT_PATHS,        EDIT_TRANSFER,        EDIT_TRANSLATION,
  28.         EDIT_KEYMACROS,        EDIT_CURSORKEYS,
  29.         EDIT_FASTMACROS,    EDIT_PASSWORD,        EDIT_RATES };
  30.  
  31.     /* What action is to follow clicking into the listview. */
  32.  
  33. enum    {    CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
  34.  
  35.     /* Some hints. */
  36.  
  37. STATIC LONG LastSelected,LastNumPhoneEntries;
  38.  
  39.     /* ListViewRender():
  40.      *
  41.      *    This callback routine is responsible for rendering
  42.      *    the single listview entries.
  43.      */
  44.  
  45. STATIC ULONG __saveds __asm
  46. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
  47. {
  48.         /* We only know how to redraw lines. */
  49.  
  50.     if(Msg -> lvdm_MethodID == LV_DRAW)
  51.     {
  52.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  53.         LONG         Count    = Node -> Entry -> Count + 1,
  54.                  Left    = Msg -> lvdm_Bounds . MinX,
  55.                  Top    = Msg -> lvdm_Bounds . MinY,
  56.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  57.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  58.                  FgPen,BgPen,
  59.                  Template,
  60.                  Len,LabelLen;
  61.         UBYTE         String[80],Num[8];
  62.  
  63.             /* Determine the rendering pens. */
  64.  
  65.         switch(Msg -> lvdm_State)
  66.         {
  67.             case LVR_SELECTEDDISABLED:
  68.             case LVR_NORMALDISABLED:
  69.             case LVR_NORMAL:
  70.  
  71.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  72.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  73.                 break;
  74.  
  75.             case LVR_SELECTED:
  76.  
  77.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  78.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  79.                 break;
  80.         }
  81.  
  82.         if(Count > 0)
  83.         {
  84.             if(Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN] != BgPen)
  85.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN];
  86.         }
  87.  
  88.         SetAPen(RPort,BgPen);
  89.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  90.  
  91.         Left    += 2;
  92.         Width    -= 2;
  93.  
  94.             /* Determine maximum index text length. */
  95.  
  96.         Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
  97.  
  98.             /* Get the vanilla name. */
  99.  
  100.         strcpy(String,&Node -> VanillaNode . ln_Name[6]);
  101.  
  102.             /* Set the rendering pens. */
  103.  
  104.         SetDrMd(RPort,JAM2);
  105.         SetBPen(RPort,BgPen);
  106.  
  107.             /* Has this entry been selected? */
  108.  
  109.         if(Count > 0)
  110.         {
  111.             LONG Delta;
  112.  
  113.                 /* Set up the header. */
  114.  
  115.             SPrintf(Num,"%3ld - ",Count);
  116.  
  117.                 /* Determine header length. */
  118.  
  119.             Len = TextLength(RPort,Num,6);
  120.  
  121.                 /* Fill the space to precede the header. */
  122.  
  123.             if((Delta = Template - Len) > 0)
  124.             {
  125.                 SetAPen(RPort,BgPen);
  126.                 RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
  127.             }
  128.  
  129.                 /* Render the header, right-justified. */
  130.  
  131.             SetAPen(RPort,FgPen);
  132.  
  133.             Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
  134.             Text(RPort,Num,6);
  135.         }
  136.         else
  137.         {
  138.                 /* Fill the blank space to precede the vanilla name. */
  139.  
  140.             SetAPen(RPort,BgPen);
  141.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  142.             SetAPen(RPort,FgPen);
  143.         }
  144.  
  145.             /* Adjust width and area left edge. */
  146.  
  147.         Left    += Template;
  148.         Width    -= Template;
  149.  
  150.             /* Determine length of vanilla name. */
  151.  
  152.         LabelLen = strlen(String);
  153.  
  154.             /* Try to make it fit. */
  155.  
  156.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  157.             LabelLen--;
  158.  
  159.             /* Print the vanilla name if possible. */
  160.  
  161.         if(LabelLen)
  162.         {
  163.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  164.             Text(RPort,String,LabelLen);
  165.  
  166.             Left    += Len;
  167.             Width    -= Len;
  168.         }
  169.  
  170.             /* Fill the area to follow the vanilla name. */
  171.  
  172.         if(Width > 0)
  173.         {
  174.             SetAPen(RPort,BgPen);
  175.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  176.         }
  177.  
  178.             /* If the item happens to be disabled, draw the cross-hatch
  179.              * pattern across it.
  180.              */
  181.  
  182.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  183.         {
  184.             SetDrMd(RPort,JAM1);
  185.  
  186.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  187.  
  188.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  189.  
  190.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  191.  
  192.             SetAfPt(RPort,NULL,0);
  193.         }
  194.  
  195.         return(LVCB_OK);
  196.     }
  197.     else
  198.         return(LVCB_UNKNOWN);
  199. }
  200.  
  201. STATIC ULONG __saveds __asm
  202. EditViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct Node *Node)
  203. {
  204.         /* We only know how to redraw lines. */
  205.  
  206.     if(Msg -> lvdm_MethodID == LV_DRAW)
  207.     {
  208.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  209.         LONG         Left    = Msg -> lvdm_Bounds . MinX,
  210.                  Top    = Msg -> lvdm_Bounds . MinY,
  211.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  212.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  213.                  FgPen,BgPen,
  214.                  Template,
  215.                  Len,LabelLen;
  216.         STRPTR         String = Node -> ln_Name;
  217.  
  218.             /* Determine the rendering pens. */
  219.  
  220.         switch(Msg -> lvdm_State)
  221.         {
  222.             case LVR_SELECTEDDISABLED:
  223.             case LVR_NORMALDISABLED:
  224.             case LVR_NORMAL:
  225.  
  226.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  227.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  228.                 break;
  229.  
  230.             case LVR_SELECTED:
  231.  
  232.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  233.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  234.                 break;
  235.         }
  236.  
  237.         SetAPen(RPort,BgPen);
  238.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  239.  
  240.         Left    += 2;
  241.         Width    -= 2;
  242.  
  243.             /* Determine maximum index text length. */
  244.  
  245.         Template = TextLength(RPort,"*",1);
  246.  
  247.             /* Set the rendering pens. */
  248.  
  249.         SetDrMd(RPort,JAM2);
  250.         SetBPen(RPort,BgPen);
  251.  
  252.             /* Has this entry been selected? */
  253.  
  254.         if(*String == '*')
  255.         {
  256.                 /* Render the header, right-justified. */
  257.  
  258.             SetAPen(RPort,FgPen);
  259.  
  260.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  261.             Text(RPort,"*",1);
  262.         }
  263.         else
  264.         {
  265.                 /* Fill the blank space to precede the vanilla name. */
  266.  
  267.             SetAPen(RPort,BgPen);
  268.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  269.             SetAPen(RPort,FgPen);
  270.         }
  271.  
  272.             /* Adjust width and area left edge. */
  273.  
  274.         Left    += Template;
  275.         Width    -= Template;
  276.  
  277.         String++;
  278.  
  279.             /* Determine length of vanilla name. */
  280.  
  281.         LabelLen = strlen(String);
  282.  
  283.             /* Try to make it fit. */
  284.  
  285.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  286.             LabelLen--;
  287.  
  288.             /* Print the vanilla name if possible. */
  289.  
  290.         if(LabelLen)
  291.         {
  292.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  293.             Text(RPort,String,LabelLen);
  294.  
  295.             Left    += Len;
  296.             Width    -= Len;
  297.         }
  298.  
  299.             /* Fill the area to follow the vanilla name. */
  300.  
  301.         if(Width > 0)
  302.         {
  303.             SetAPen(RPort,BgPen);
  304.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  305.         }
  306.  
  307.             /* If the item happens to be disabled, draw the cross-hatch
  308.              * pattern across it.
  309.              */
  310.  
  311.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  312.         {
  313.             SetDrMd(RPort,JAM1);
  314.  
  315.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  316.  
  317.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  318.  
  319.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  320.  
  321.             SetAfPt(RPort,NULL,0);
  322.         }
  323.  
  324.         return(LVCB_OK);
  325.     }
  326.     else
  327.         return(LVCB_UNKNOWN);
  328. }
  329.  
  330. STATIC VOID __regargs
  331. UpdateEditList(struct Configuration *Config)
  332. {
  333.     ULONG    *Array;
  334.     WORD     i;
  335.  
  336.     Array = (ULONG *)Config;
  337.  
  338.     for(i = 0 ; i < 10 ; i++)
  339.     {
  340.         if(Array[i])
  341.             EditLabels[i][0] = (UBYTE)'*';
  342.         else
  343.             EditLabels[i][0] = ' ';
  344.     }
  345.  
  346.     if(Config -> TransferConfig)
  347.         EditLabels[10][0] = (UBYTE)'*';
  348.     else
  349.         EditLabels[10][0] = ' ';
  350.  
  351.     EditLabels[15][0] = (UBYTE)'*';
  352.     EditLabels[16][0] = (UBYTE)'*';
  353.  
  354.     if(Config -> FileConfig)
  355.     {
  356.         EditLabels[11][0] = (UBYTE)'*';
  357.         EditLabels[12][0] = (UBYTE)'*';
  358.         EditLabels[13][0] = (UBYTE)'*';
  359.         EditLabels[14][0] = (UBYTE)'*';
  360.     }
  361.     else
  362.     {
  363.         EditLabels[11][0] = ' ';
  364.         EditLabels[12][0] = ' ';
  365.         EditLabels[13][0] = ' ';
  366.         EditLabels[14][0] = ' ';
  367.     }
  368. }
  369.  
  370. STATIC BOOLEAN
  371. SaveChanges(struct Window *Parent)
  372. {
  373.     return((BOOLEAN)MyEasyRequest(Parent,LocaleString(MSG_SAVE_CHANGES),LocaleString(MSG_GLOBAL_YES_NO_TXT)));
  374. }
  375.  
  376. STATIC BYTE __regargs
  377. EditConfig(struct Configuration *Config,UWORD Type,ULONG Qualifier,struct Window *Window)
  378. {
  379.     STATIC LONG TypeMappings[15][2] =
  380.     {
  381.         EDIT_SERIAL,        PREF_SERIAL,
  382.         EDIT_MODEM,        PREF_MODEM,
  383.         EDIT_SCREEN,        PREF_SCREEN,
  384.         EDIT_TERMINAL,        PREF_TERMINAL,
  385.         EDIT_EMULATION,        PREF_EMULATION,
  386.         EDIT_CLIPBOARD,        PREF_CLIP,
  387.         EDIT_CAPTURE,        PREF_CAPTURE,
  388.         EDIT_COMMANDS,        PREF_COMMAND,
  389.         EDIT_MISC,        PREF_MISC,
  390.         EDIT_PATHS,        PREF_PATH,
  391.         EDIT_TRANSFER,        PREF_TRANSFER,
  392.         EDIT_TRANSLATION,    PREF_FILE,
  393.         EDIT_KEYMACROS,        PREF_FILE,
  394.         EDIT_CURSORKEYS,    PREF_FILE,
  395.         EDIT_FASTMACROS,    PREF_FILE
  396.     };
  397.  
  398.     struct FileRequester    *FileRequest;
  399.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  400.                 *DummyChar;
  401.     BOOLEAN             Changed    = FALSE,
  402.                  Default    = FALSE,
  403.                  FallBack    = TRUE;
  404.     LONG             PrefType;
  405.     WORD             i;
  406.     APTR             Data;
  407.  
  408.     for(i = 0 ; i < 15 ; i++)
  409.     {
  410.         if(TypeMappings[i][0] == Type)
  411.         {
  412.             PrefType = TypeMappings[i][1];
  413.  
  414.             break;
  415.         }
  416.     }
  417.  
  418.     Data = GetConfigEntry(Config,PrefType);
  419.  
  420.     if(CreateConfigEntry(Config,PrefType))
  421.     {
  422.         if(!Data)
  423.             ResetConfigEntry(Config,PrefType,FALSE);
  424.  
  425.         switch(Type)
  426.         {
  427.             case EDIT_SERIAL:
  428.  
  429.                 Changed = SerialPanel(Config,&Default);
  430.                 break;
  431.  
  432.             case EDIT_MODEM:
  433.  
  434.                 Changed = ModemPanel(Config,&Default);
  435.                 break;
  436.  
  437.             case EDIT_SCREEN:
  438.  
  439.                 Changed = ScreenPanel(Config,&Default);
  440.                 break;
  441.  
  442.             case EDIT_TERMINAL:
  443.  
  444.                 Changed = TerminalPanel(Config,&Default);
  445.                 break;
  446.  
  447.             case EDIT_EMULATION:
  448.  
  449.                 Changed = EmulationPanel(Config,&Default);
  450.                 break;
  451.  
  452.             case EDIT_CLIPBOARD:
  453.  
  454.                 Changed = ClipPanel(Config,&Default);
  455.                 break;
  456.  
  457.             case EDIT_CAPTURE:
  458.  
  459.                 Changed = CapturePanel(Config,&Default);
  460.                 break;
  461.  
  462.             case EDIT_COMMANDS:
  463.  
  464.                 Changed = CommandPanel(Config,&Default);
  465.                 break;
  466.  
  467.             case EDIT_MISC:
  468.  
  469.                 Changed = MiscPanel(Config,&Default);
  470.                 break;
  471.  
  472.             case EDIT_PATHS:
  473.  
  474.                 Changed = PathPanel(Config,&Default);
  475.                 break;
  476.  
  477.             case EDIT_TRANSFER:
  478.  
  479.                 Changed = LibPanel(Config,&Default);
  480.                 break;
  481.  
  482.             case EDIT_TRANSLATION:
  483.  
  484.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  485.                 {
  486.                     struct TranslationEntry **Send,**Receive = NULL;
  487.                     BOOLEAN            Success = FALSE;
  488.  
  489.                     strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
  490.  
  491.                     if(Send = AllocTranslationTable())
  492.                     {
  493.                         if(Receive = AllocTranslationTable())
  494.                         {
  495.                             Success = TRUE;
  496.  
  497.                             if(!LoadTranslationTables(DummyBuffer,Send,Receive))
  498.                             {
  499.                                 ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  500.  
  501.                                 FillTranslationTable(Send);
  502.                                 FillTranslationTable(Receive);
  503.                             }
  504.                         }
  505.                     }
  506.  
  507.                     if(Success)
  508.                     {
  509.                         if(TranslationPanel(&Send,&Receive,DummyBuffer,Window) && Send && Receive)
  510.                         {
  511.                             if(IsStandardTable(Send) && IsStandardTable(Receive))
  512.                                 DummyBuffer[0] = 0;
  513.  
  514.                             if(SaveChanges(Window))
  515.                             {
  516.                                 if(!SaveTranslationTables(DummyBuffer,Send,Receive))
  517.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  518.                             }
  519.                         }
  520.  
  521.                         if(strcmp(Config -> FileConfig -> TranslationFileName,DummyBuffer))
  522.                         {
  523.                             strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  524.  
  525.                             Changed = TRUE;
  526.                         }
  527.  
  528.                         FallBack = FALSE;
  529.                     }
  530.  
  531.                     if(Send)
  532.                         FreeTranslationTable(Send);
  533.  
  534.                     if(Receive)
  535.                         FreeTranslationTable(Receive);
  536.                 }
  537.  
  538.                 if(FallBack)
  539.                 {
  540.                     SplitFileName(Config -> FileConfig -> TranslationFileName,&DummyChar,DummyBuffer);
  541.     
  542.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  543.                     {
  544.                         strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  545.     
  546.                         FreeAslRequest(FileRequest);
  547.     
  548.                         Changed = TRUE;
  549.                     }
  550.                 }
  551.  
  552.                 break;
  553.  
  554.             case EDIT_KEYMACROS:
  555.  
  556.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  557.                 {
  558.                     struct MacroKeys *Keys;
  559.  
  560.                     if(Keys = (struct MacroKeys *)AllocVecPooled(sizeof(struct MacroKeys),MEMF_ANY | MEMF_CLEAR))
  561.                     {
  562.                         if(!LoadMacros(Config -> FileConfig -> MacroFileName,Keys))
  563.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  564.  
  565.                         strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
  566.  
  567.                         if(MacroPanel(Keys,DummyBuffer,FALSE,Window))
  568.                         {
  569.                             if(SaveChanges(Window))
  570.                             {
  571.                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),ID_KEYS))
  572.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  573.                             }
  574.                         }
  575.  
  576.                         if(strcmp(Config -> FileConfig -> MacroFileName,DummyBuffer))
  577.                         {
  578.                             strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  579.  
  580.                             Changed = TRUE;
  581.                         }
  582.  
  583.                         FallBack = FALSE;
  584.  
  585.                         FreeVecPooled(Keys);
  586.                     }
  587.                 }
  588.  
  589.                 if(FallBack)
  590.                 {
  591.                     SplitFileName(Config -> FileConfig -> MacroFileName,&DummyChar,DummyBuffer);
  592.  
  593.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  594.                     {
  595.                         strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  596.  
  597.                         FreeAslRequest(FileRequest);
  598.  
  599.                         Changed = TRUE;
  600.                     }
  601.                 }
  602.  
  603.                 break;
  604.  
  605.             case EDIT_CURSORKEYS:
  606.  
  607.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  608.                 {
  609.                     struct CursorKeys *Keys;
  610.  
  611.                     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY | MEMF_CLEAR))
  612.                     {
  613.                         strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
  614.  
  615.                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  616.                         {
  617.                             ResetCursorKeys(Keys);
  618.  
  619.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  620.                         }
  621.  
  622.                         if(CursorPanel(Keys,DummyBuffer,Window))
  623.                         {
  624.                             if(SaveChanges(Window))
  625.                             {
  626.                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  627.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  628.                             }
  629.                         }
  630.  
  631.                         if(strcmp(Config -> FileConfig -> CursorFileName,DummyBuffer))
  632.                         {
  633.                             strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  634.  
  635.                             Changed = TRUE;
  636.                         }
  637.  
  638.                         FallBack = FALSE;
  639.  
  640.                         FreeVecPooled(Keys);
  641.                     }
  642.                 }
  643.  
  644.                 if(FallBack)
  645.                 {
  646.                     SplitFileName(Config -> FileConfig -> CursorFileName,&DummyChar,DummyBuffer);
  647.  
  648.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  649.                     {
  650.                         strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  651.     
  652.                         FreeAslRequest(FileRequest);
  653.     
  654.                         Changed = TRUE;
  655.                     }
  656.                 }
  657.  
  658.                 break;
  659.  
  660.             case EDIT_FASTMACROS:
  661.  
  662.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  663.                 {
  664.                     struct List *List;
  665.  
  666.                     if(List = CreateList())
  667.                     {
  668.                         strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
  669.  
  670.                         if(!LoadFastMacros(DummyBuffer,List))
  671.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  672.  
  673.                         if(FastMacroPanel(List,DummyBuffer,Window))
  674.                         {
  675.                             if(SaveChanges(Window))
  676.                             {
  677.                                 if(!SaveFastMacros(DummyBuffer,List))
  678.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  679.                             }
  680.                         }
  681.  
  682.                         if(strcmp(Config -> FileConfig -> FastMacroFileName,DummyBuffer))
  683.                         {
  684.                             strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  685.  
  686.                             Changed = TRUE;
  687.                         }
  688.  
  689.                         FallBack = FALSE;
  690.  
  691.                         DeleteList(List);
  692.                     }
  693.                 }
  694.  
  695.                 if(FallBack)
  696.                 {
  697.                     SplitFileName(Config -> FileConfig -> FastMacroFileName,&DummyChar,DummyBuffer);
  698.     
  699.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  700.                     {
  701.                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  702.     
  703.                         FreeAslRequest(FileRequest);
  704.     
  705.                         Changed = TRUE;
  706.                     }
  707.                 }
  708.  
  709.                 break;
  710.         }
  711.  
  712.         if((!Changed && !Data) || Default)
  713.         {
  714.             DeleteConfigEntry(Config,PrefType);
  715.  
  716.             if(Default)
  717.                 Changed = TRUE;
  718.         }
  719.     }
  720.     else
  721.         DisplayBeep(Window -> WScreen);
  722.  
  723.     return(Changed);
  724. }
  725.  
  726. STATIC VOID __regargs
  727. SetPanelState(struct LayoutHandle *Handle,struct List *PhoneList,LONG Count,LONG Selected,BOOLEAN Released)
  728. {
  729.     if(NumPhoneEntries)
  730.     {
  731.         LT_SetAttributes(Handle,GAD_SAVELIST,
  732.             GA_Disabled,    FALSE,
  733.         TAG_DONE);
  734.  
  735.         LT_SetAttributes(Handle,GAD_PRINT,
  736.             GA_Disabled,    FALSE,
  737.         TAG_DONE);
  738.  
  739.         LT_SetAttributes(Handle,GAD_SORTLIST,
  740.             GA_Disabled,    NumPhoneEntries < 2,
  741.         TAG_DONE);
  742.  
  743.         LT_SetAttributes(Handle,GAD_PASSWORD,
  744.             GA_Disabled,    FALSE,
  745.         TAG_DONE);
  746.  
  747.         LT_SetAttributes(Handle,GAD_CLONEENTRY,
  748.             GA_Disabled,    Selected == -1,
  749.         TAG_DONE);
  750.  
  751.         LT_SetAttributes(Handle,GAD_REMOVEENTRY,
  752.             GA_Disabled,    Selected == -1,
  753.         TAG_DONE);
  754.  
  755.         LT_SetAttributes(Handle,GAD_COPYCONFIG,
  756.             GA_Disabled,    FALSE,
  757.         TAG_DONE);
  758.  
  759.         LT_SetAttributes(Handle,GAD_USEIT,
  760.             GA_Disabled,    Selected == -1,
  761.         TAG_DONE);
  762.  
  763.         if(Selected == -1)
  764.         {
  765.             LT_SetAttributes(Handle,GAD_EDIT,
  766.                 GA_Disabled,    TRUE,
  767.             TAG_DONE);
  768.  
  769.             if(Selected != LastSelected)
  770.             {
  771.                 LT_SetAttributes(Handle,GAD_NAMELIST,
  772.                     GA_Disabled,    FALSE,
  773.                     GTLV_Selected,    ~0,
  774.                 TAG_DONE);
  775.     
  776.                 LT_SetAttributes(Handle,GAD_NAME,
  777.                     GTST_String,    "",
  778.                     GA_Disabled,    TRUE,
  779.                 TAG_DONE);
  780.     
  781.                 LT_SetAttributes(Handle,GAD_COMMENT,
  782.                     GTST_String,    "",
  783.                     GA_Disabled,    TRUE,
  784.                 TAG_DONE);
  785.     
  786.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  787.                     GTST_String,    "",
  788.                     GA_Disabled,    TRUE,
  789.                 TAG_DONE);
  790.     
  791.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  792.                     GTCB_Checked,    FALSE,
  793.                     GA_Disabled,    TRUE,
  794.                 TAG_DONE);
  795.             }
  796.  
  797.             LT_SetAttributes(Handle,GAD_TAG,
  798.                 GA_Disabled,    TRUE,
  799.             TAG_DONE);
  800.  
  801.             LT_SetAttributes(Handle,GAD_UNTAG,
  802.                 GA_Disabled,    TRUE,
  803.             TAG_DONE);
  804.  
  805.             LT_SetAttributes(Handle,GAD_DIALLIST,
  806.                 GA_Disabled,    Online || !Count,
  807.             TAG_DONE);
  808.         }
  809.         else
  810.         {
  811.             LT_SetAttributes(Handle,GAD_NAMELIST,
  812.                 GA_Disabled,    FALSE,
  813.                 GTLV_Labels,    PhoneList,
  814.             TAG_DONE);
  815.  
  816.             if(Selected != LastSelected)
  817.             {
  818.                 LT_SetAttributes(Handle,GAD_NAME,
  819.                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  820.                     GA_Disabled,    FALSE,
  821.                 TAG_DONE);
  822.     
  823.                 LT_SetAttributes(Handle,GAD_COMMENT,
  824.                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  825.                     GA_Disabled,    FALSE,
  826.                 TAG_DONE);
  827.     
  828.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  829.                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  830.                     GA_Disabled,    FALSE,
  831.                 TAG_DONE);
  832.     
  833.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  834.                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  835.                     GA_Disabled,    FALSE,
  836.                 TAG_DONE);
  837.  
  838.                 if(Released)
  839.                 {
  840.                     LT_SetAttributes(Handle,GAD_EDIT,
  841.                         GTLV_Labels,    ~0,
  842.                     TAG_DONE);
  843.  
  844.                     UpdateEditList(Phonebook[Selected] -> Config);
  845.  
  846.                     LT_SetAttributes(Handle,GAD_EDIT,
  847.                         GTLV_Labels,    EditList,
  848.                         GA_Disabled,    FALSE,
  849.                     TAG_DONE);
  850.                 }
  851.             }
  852.             else
  853.             {
  854.                 LT_SetAttributes(Handle,GAD_EDIT,
  855.                     GA_Disabled,    FALSE,
  856.                 TAG_DONE);
  857.             }
  858.  
  859.             LT_SetAttributes(Handle,GAD_TAG,
  860.                 GA_Disabled,    Phonebook[Selected] -> Count != -1,
  861.             TAG_DONE);
  862.  
  863.             LT_SetAttributes(Handle,GAD_UNTAG,
  864.                 GA_Disabled,    Phonebook[Selected] -> Count == -1,
  865.             TAG_DONE);
  866.  
  867.             LT_SetAttributes(Handle,GAD_DIALLIST,
  868.                 GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0],
  869.             TAG_DONE);
  870.         }
  871.  
  872.         LT_SetAttributes(Handle,GAD_TAG_ALL,
  873.             GA_Disabled,    Count == NumPhoneEntries,
  874.         TAG_DONE);
  875.  
  876.         LT_SetAttributes(Handle,GAD_TOGGLE_ALL,
  877.             GA_Disabled,    FALSE,
  878.         TAG_DONE);
  879.  
  880.         LT_SetAttributes(Handle,GAD_CLEARLIST,
  881.             GA_Disabled,    !Count,
  882.         TAG_DONE);
  883.     }
  884.     else
  885.     {
  886.         LONG i;
  887.  
  888.         for(i = GAD_NAMELIST ; i < GAD_CANCEL ; i++)
  889.         {
  890.             LT_SetAttributes(Handle,i,
  891.                 GA_Disabled,    i != GAD_LOADLIST && i != GAD_NEWENTRY,
  892.             TAG_DONE);
  893.         }
  894.     }
  895.  
  896.     LastSelected = Selected;
  897. }
  898.  
  899. BYTE
  900. PhonePanel()
  901. {
  902.     struct LayoutHandle    *Handle;
  903.     struct PhoneNode    *TempNode;
  904.     struct List        *PhoneList;
  905.     LONG             Count;
  906.     BYTE             DialTheList = FALSE;
  907.  
  908.     LastSelected = LastNumPhoneEntries = -17;
  909.  
  910.     if(Phonebook && NumPhoneEntries)
  911.     {
  912.         LONG i;
  913.  
  914.         if(!(PhoneList = CreatePhoneList()))
  915.         {
  916.             DisplayBeep(Window -> WScreen);
  917.  
  918.             return(FALSE);
  919.         }
  920.  
  921.         FreeDialList(TRUE);
  922.  
  923.         for(i = 0, Count = -1 ; i < NumPhoneEntries ; i++)
  924.         {
  925.             if(Phonebook[i] -> Count > Count)
  926.                 Count = Phonebook[i] -> Count;
  927.         }
  928.  
  929.         Count++;
  930.     }
  931.     else
  932.     {
  933.         PhoneList    = NULL;
  934.         Count        = 0;
  935.     }
  936.  
  937.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  938.         LH_LocaleHook,        &LocaleHook,
  939. /*        LH_AutoActivate,    TRUE,*/
  940.     TAG_DONE))
  941.     {
  942.         STATIC struct Hook ListViewHook =
  943.         {
  944.             {NULL},
  945.             (HOOKFUNC)ListViewRender
  946.         };
  947.  
  948.         STATIC struct Hook EditViewHook =
  949.         {
  950.             {NULL},
  951.             (HOOKFUNC)EditViewRender
  952.         };
  953.  
  954.         STATIC LONG LabelIDTable[] =
  955.         {
  956.             MSG_PHONEPANEL_LOAD_LIST_GAD,
  957.             MSG_PHONEPANEL_SAVE_LIST_GAD,
  958.             MSG_PHONEPANEL_PRINT_GAD,
  959.             MSG_PHONEPANEL_SORT_LIST_GAD,
  960.             MSG_PHONEPANEL_SET_PASSWORT_GAD,
  961.             MSG_PHONEPANEL_NEW_ENTRY_GAD,
  962.             MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  963.             MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  964.             MSG_PHONEPANEL_COPY_CONFIG_GAD,
  965.             MSG_PHONEPANEL_USE_ENTRY_GAD,
  966.             MSG_PHONEPANEL_TAG_GAD,
  967.             MSG_PHONEPANEL_UNTAG_GAD,
  968.             MSG_PHONEPANEL_TAG_ALL_GAD,
  969.             MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  970.             MSG_PHONEPANEL_UNTAG_ALL_GAD
  971.         };
  972.  
  973.         struct IBox     Bounds;
  974.         struct Window    *PhoneWindow;
  975.         LONG         i,Max,Size,MaxPen,MaxChars;
  976.         UBYTE         SmallString[2];
  977.  
  978.         for(i = MaxChars = 0 ; i < NumElements(LabelIDTable) ; i++)
  979.         {
  980.             if((Max = LT_LabelChars(Handle,LocaleString(LabelIDTable[i]))) > MaxChars)
  981.                 MaxChars = Max;
  982.         }
  983.  
  984.         MaxPen = MAX(Handle -> DrawInfo -> dri_Pens[BLOCKPEN],MAX(Handle -> DrawInfo -> dri_Pens[TEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[BACKGROUNDPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLTEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLPEN],Handle -> DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN])))));
  985.  
  986.         SmallString[1] = 0;
  987.         Max = 0;
  988.  
  989.         for(i = MSG_PHONEPANEL_SERIAL_TXT ; i <= MSG_PHONEPANEL_RATES_TXT ; i++)
  990.             EditLabels[i - MSG_PHONEPANEL_SERIAL_TXT][0] = ' ';
  991.  
  992.         for(i = '0' ; i <= '9' ; i++)
  993.         {
  994.             SmallString[0] = i;
  995.  
  996.             if((Size = LT_LabelWidth(Handle,SmallString)) > Max)
  997.                 Max = Size;
  998.         }
  999.  
  1000.         ListViewHook . h_Data = (APTR)Max;
  1001.  
  1002.         LT_New(Handle,
  1003.             LA_Type,    VERTICAL_KIND,
  1004.         TAG_DONE);
  1005.         {
  1006.             LT_New(Handle,
  1007.                 LA_Type,    VERTICAL_KIND,
  1008. /*                LA_LabelID,    MSG_V36_0132,*/
  1009.             TAG_DONE);
  1010.             {
  1011.                 LT_New(Handle,
  1012.                     LA_Type,    HORIZONTAL_KIND,
  1013.                 TAG_DONE);
  1014.                 {
  1015.                     LT_New(Handle,
  1016.                         LA_Type,    LISTVIEW_KIND,
  1017.                         LA_LabelID,    MSG_GLOBAL_NAME_LIST_GAD,
  1018.                         LA_ID,        GAD_NAMELIST,
  1019.                         LA_Chars,    40,
  1020.                         LA_Lines,    4,
  1021.                         GTLV_CallBack,    &ListViewHook,
  1022.                         GTLV_MaxPen,    MaxPen,
  1023.                         LALV_CursorKey,    TRUE,
  1024.                         LALV_MaxGrowX,    50,
  1025.                         LALV_MaxGrowY,    20,
  1026.  
  1027.                         Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  1028.  
  1029.                         PhoneList ? GTLV_Labels : TAG_IGNORE, PhoneList,
  1030.                     TAG_DONE);
  1031.  
  1032.                     LT_New(Handle,
  1033.                         LA_Type,    LISTVIEW_KIND,
  1034.                         LA_LabelID,    MSG_PHONEPANEL_SETTINGS_TXT,
  1035.                         LA_Lines,    4,
  1036.                         LA_ID,        GAD_EDIT,
  1037.                         LA_NoKey,    TRUE,
  1038.                         GA_Disabled,    TRUE,
  1039.                         GTLV_Labels,    EditList,
  1040.                         GTLV_CallBack,    &EditViewHook,
  1041.                     TAG_DONE);
  1042.  
  1043.                     LT_EndGroup(Handle);
  1044.                 }
  1045.  
  1046.                 LT_New(Handle,
  1047.                     LA_Type,    HORIZONTAL_KIND,
  1048.                 TAG_DONE);
  1049.                 {
  1050.                     LT_New(Handle,
  1051.                         LA_Type,    VERTICAL_KIND,
  1052.                     TAG_DONE);
  1053.                     {
  1054.                         LT_New(Handle,
  1055.                             LA_Type,        STRING_KIND,
  1056.                             LA_LabelID,        MSG_PHONEPANEL_BBS_NAME_GAD,
  1057.                             LA_ID,            GAD_NAME,
  1058.                             GTST_MaxChars,        39,
  1059.                             LA_Chars,        40,
  1060.                             GA_Disabled,        TRUE,
  1061.                         TAG_DONE);
  1062.     
  1063.                         LT_New(Handle,
  1064.                             LA_Type,        STRING_KIND,
  1065.                             LA_LabelID,        MSG_PHONEPANEL_COMMENT_GAD,
  1066.                             LA_ID,            GAD_COMMENT,
  1067.                             GTST_MaxChars,        99,
  1068.                             GA_Disabled,        TRUE,
  1069.                         TAG_DONE);
  1070.     
  1071.                         LT_New(Handle,
  1072.                             LA_Type,        STRING_KIND,
  1073.                             LA_LabelID,        MSG_PHONEPANEL_PHONE_NUMBER_GAD,
  1074.                             LA_ID,            GAD_PHONENUMBER,
  1075.                             GTST_MaxChars,        99,
  1076.                             LAST_LastGadget,    TRUE,
  1077.                             GA_Disabled,        TRUE,
  1078.                         TAG_DONE);
  1079.     
  1080.                         LT_EndGroup(Handle);
  1081.                     }
  1082.     
  1083.                     LT_New(Handle,
  1084.                         LA_Type,    VERTICAL_KIND,
  1085.                     TAG_DONE);
  1086.                     {
  1087.                         LT_New(Handle,
  1088.                             LA_Type,    CHECKBOX_KIND,
  1089.                             LA_LabelID,    MSG_PHONEPANEL_QUICK_MENU_GAD,
  1090.                             LA_ID,        GAD_QUICKMENU,
  1091.                             GA_Disabled,    TRUE,
  1092.                         TAG_DONE);
  1093.     
  1094.                         LT_EndGroup(Handle);
  1095.                     }
  1096.  
  1097.                     LT_EndGroup(Handle);
  1098.                 }
  1099.  
  1100.                 LT_EndGroup(Handle);
  1101.             }
  1102.  
  1103.             LT_New(Handle,
  1104.                 LA_Type,VERTICAL_KIND,
  1105.             TAG_DONE);
  1106.             {
  1107.                 LT_New(Handle,
  1108.                     LA_Type,    XBAR_KIND,
  1109.                     LAXB_FullSize,    TRUE,
  1110.                 TAG_DONE);
  1111.  
  1112.                 LT_EndGroup(Handle);
  1113.             }
  1114.  
  1115.             LT_New(Handle,
  1116.                 LA_Type,    VERTICAL_KIND,
  1117.             TAG_DONE);
  1118.             {
  1119.                 LT_New(Handle,
  1120.                     LA_Type,    HORIZONTAL_KIND,
  1121.                     LAGR_SameSize,    TRUE,
  1122.                     LAGR_Spread,    TRUE,
  1123.                 TAG_DONE);
  1124.                 {
  1125.                     LT_New(Handle,
  1126.                         LA_Type,    BUTTON_KIND,
  1127.                         LA_LabelID,    MSG_PHONEPANEL_NEW_ENTRY_GAD,
  1128.                         LA_ID,        GAD_NEWENTRY,
  1129.                         LA_Chars,    MaxChars,
  1130.                     TAG_DONE);
  1131.  
  1132.                     LT_New(Handle,
  1133.                         LA_Type,    BUTTON_KIND,
  1134.                         LA_LabelID,    MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  1135.                         LA_ID,        GAD_CLONEENTRY,
  1136.                         GA_Disabled,    TRUE,
  1137.                     TAG_DONE);
  1138.  
  1139.                     LT_New(Handle,
  1140.                         LA_Type,    BUTTON_KIND,
  1141.                         LA_LabelID,    MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  1142.                         LA_ID,        GAD_REMOVEENTRY,
  1143.                         GA_Disabled,    TRUE,
  1144.                     TAG_DONE);
  1145.  
  1146.                     LT_New(Handle,
  1147.                         LA_Type,    BUTTON_KIND,
  1148.                         LA_LabelID,    MSG_PHONEPANEL_COPY_CONFIG_GAD,
  1149.                         LA_ID,        GAD_COPYCONFIG,
  1150.                         GA_Disabled,    !NumPhoneEntries,
  1151.                     TAG_DONE);
  1152.  
  1153.                     LT_New(Handle,
  1154.                         LA_Type,    BUTTON_KIND,
  1155.                         LA_LabelID,    MSG_PHONEPANEL_USE_ENTRY_GAD,
  1156.                         LA_ID,        GAD_USEIT,
  1157.                         GA_Disabled,    TRUE,
  1158.                     TAG_DONE);
  1159.  
  1160.                     LT_EndGroup(Handle);
  1161.                 }
  1162.  
  1163.                 LT_New(Handle,
  1164.                     LA_Type,    HORIZONTAL_KIND,
  1165.                     LAGR_SameSize,    TRUE,
  1166.                     LAGR_Spread,    TRUE,
  1167.                 TAG_DONE);
  1168.                 {
  1169.                     LT_New(Handle,
  1170.                         LA_Type,    BUTTON_KIND,
  1171.                         LA_LabelID,    MSG_PHONEPANEL_TAG_GAD,
  1172.                         LA_Chars,    MaxChars,
  1173.                         LA_ID,        GAD_TAG,
  1174.                         GA_Disabled,    TRUE,
  1175.                     TAG_DONE);
  1176.  
  1177.                     LT_New(Handle,
  1178.                         LA_Type,    BUTTON_KIND,
  1179.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_GAD,
  1180.                         LA_ID,        GAD_UNTAG,
  1181.                         GA_Disabled,    !Count,
  1182.                     TAG_DONE);
  1183.  
  1184.                     LT_New(Handle,
  1185.                         LA_Type,    BUTTON_KIND,
  1186.                         LA_LabelID,    MSG_PHONEPANEL_TAG_ALL_GAD,
  1187.                         LA_ID,        GAD_TAG_ALL,
  1188.                         GA_Disabled,    !NumPhoneEntries,
  1189.                     TAG_DONE);
  1190.  
  1191.                     LT_New(Handle,
  1192.                         LA_Type,    BUTTON_KIND,
  1193.                         LA_LabelID,    MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  1194.                         LA_ID,        GAD_TOGGLE_ALL,
  1195.                         GA_Disabled,    !NumPhoneEntries,
  1196.                     TAG_DONE);
  1197.  
  1198.                     LT_New(Handle,
  1199.                         LA_Type,    BUTTON_KIND,
  1200.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_ALL_GAD,
  1201.                         LA_ID,        GAD_CLEARLIST,
  1202.                         GA_Disabled,    !Count,
  1203.                     TAG_DONE);
  1204.  
  1205.                     LT_EndGroup(Handle);
  1206.                 }
  1207.  
  1208.                 LT_New(Handle,
  1209.                     LA_Type,VERTICAL_KIND,
  1210.                 TAG_DONE);
  1211.                 {
  1212.                     LT_New(Handle,
  1213.                         LA_Type,    XBAR_KIND,
  1214.                     TAG_DONE);
  1215.  
  1216.                     LT_EndGroup(Handle);
  1217.                 }
  1218.  
  1219.                 LT_New(Handle,
  1220.                     LA_Type,    HORIZONTAL_KIND,
  1221.                     LAGR_SameSize,    TRUE,
  1222.                     LAGR_Spread,    TRUE,
  1223.                 TAG_DONE);
  1224.                 {
  1225.                     LT_New(Handle,
  1226.                         LA_Type,    BUTTON_KIND,
  1227.                         LA_LabelID,    MSG_PHONEPANEL_LOAD_LIST_GAD,
  1228.                         LA_ID,        GAD_LOADLIST,
  1229.                         LA_Chars,    MaxChars,
  1230.                     TAG_DONE);
  1231.  
  1232.                     LT_New(Handle,
  1233.                         LA_Type,    BUTTON_KIND,
  1234.                         LA_LabelID,    MSG_PHONEPANEL_SAVE_LIST_GAD,
  1235.                         LA_ID,        GAD_SAVELIST,
  1236.                         GA_Disabled,    !NumPhoneEntries,
  1237.                     TAG_DONE);
  1238.  
  1239.                     LT_New(Handle,
  1240.                         LA_Type,    BUTTON_KIND,
  1241.                         LA_LabelID,    MSG_PHONEPANEL_PRINT_GAD,
  1242.                         LA_ID,        GAD_PRINT,
  1243.                         GA_Disabled,    !NumPhoneEntries,
  1244.                     TAG_DONE);
  1245.  
  1246.                     LT_New(Handle,
  1247.                         LA_Type,    BUTTON_KIND,
  1248.                         LA_LabelID,    MSG_PHONEPANEL_SORT_LIST_GAD,
  1249.                         LA_ID,        GAD_SORTLIST,
  1250.                         GA_Disabled,    NumPhoneEntries < 2,
  1251.                     TAG_DONE);
  1252.  
  1253.                     LT_New(Handle,
  1254.                         LA_Type,    BUTTON_KIND,
  1255.                         LA_LabelID,    MSG_PHONEPANEL_SET_PASSWORT_GAD,
  1256.                         LA_ID,        GAD_PASSWORD,
  1257.                         GA_Disabled,    !NumPhoneEntries,
  1258.                     TAG_DONE);
  1259.  
  1260.                     LT_EndGroup(Handle);
  1261.                 }
  1262.  
  1263.                 LT_New(Handle,
  1264.                     LA_Type,VERTICAL_KIND,
  1265.                 TAG_DONE);
  1266.                 {
  1267.                     LT_New(Handle,
  1268.                         LA_Type,    XBAR_KIND,
  1269.                         LAXB_FullSize,    TRUE,
  1270.                     TAG_DONE);
  1271.  
  1272.                     LT_EndGroup(Handle);
  1273.                 }
  1274.  
  1275.                 LT_New(Handle,
  1276.                     LA_Type,    HORIZONTAL_KIND,
  1277.                 TAG_DONE);
  1278.                 {
  1279.                     LT_New(Handle,
  1280.                         LA_Type,    BUTTON_KIND,
  1281.                         LA_LabelID,    MSG_PHONEPANEL_DIAL_LIST_GAD,
  1282.                         LA_ID,        GAD_DIALLIST,
  1283.                         LABT_ReturnKey,    TRUE,
  1284.                         LABT_ExtraFat,    TRUE,
  1285.                         GA_Disabled,    !Count || Online,
  1286.                     TAG_DONE);
  1287.  
  1288.                     LT_EndGroup(Handle);
  1289.                 }
  1290.  
  1291.                 LT_EndGroup(Handle);
  1292.             }
  1293.  
  1294.             LT_EndGroup(Handle);
  1295.         }
  1296.  
  1297.         if(Screen && Window)
  1298.         {
  1299.             Bounds . Left    = Window -> LeftEdge;
  1300.             Bounds . Top    = Window -> TopEdge;
  1301.             Bounds . Width    = Window -> Width;
  1302.             Bounds . Height    = Window -> Height;
  1303.         }
  1304.  
  1305.         if(PhoneWindow = LT_Layout(Handle,LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  1306.             LAWN_HelpHook,        &GuideHook,
  1307.             LAWN_Parent,        Window,
  1308.             WA_DepthGadget,        TRUE,
  1309.             WA_CloseGadget,        TRUE,
  1310.             WA_DragBar,        TRUE,
  1311.             WA_RMBTrap,        TRUE,
  1312.             WA_Activate,        TRUE,
  1313.         TAG_DONE))
  1314.         {
  1315.             struct IntuiMessage    *Message;
  1316.             BOOLEAN             Done = FALSE,
  1317.                          Released;
  1318.             ULONG             MsgClass,
  1319.                          MsgQualifier;
  1320.             UWORD             MsgCode;
  1321.             struct Gadget        *MsgGadget;
  1322.  
  1323.             BYTE             ClickAction;
  1324.  
  1325.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  1326.                         *DummyChar;
  1327.  
  1328.             LONG             Selected = ~0,i,
  1329.                          MsgGadgetID;
  1330.  
  1331.             struct FileRequester    *FileRequest;
  1332.             WORD             Vanilla;
  1333.  
  1334.             GuideContext(CONTEXT_PHONEBOOK);
  1335.  
  1336.             PushWindow(PhoneWindow);
  1337.  
  1338.             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1339.  
  1340.             do
  1341.             {
  1342.                 if(Wait(PORTMASK(PhoneWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1343.                 {
  1344.                     FreeDialList(TRUE);
  1345.  
  1346.                     break;
  1347.                 }
  1348.  
  1349.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PhoneWindow -> UserPort))
  1350.                 {
  1351.                     MsgClass    = Message -> Class;
  1352.                     MsgQualifier    = Message -> Qualifier;
  1353.                     MsgCode        = Message -> Code;
  1354.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1355.  
  1356. /*                    if(MsgQualifier & IEQUALIFIER_REPEAT)*/
  1357. /*                        Released = FALSE;*/
  1358. /*                    else*/
  1359.                         Released = TRUE;
  1360.  
  1361.                     GT_ReplyIMsg(Message);
  1362.  
  1363.                     if(MsgClass == IDCMP_RAWKEY)
  1364.                     {
  1365.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1366.  
  1367.                         if(MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_NAMELIST)
  1368.                             MsgQualifier &= ~(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT);
  1369.                     }
  1370.                     else
  1371.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1372.  
  1373.                     if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_IDCMPUPDATE)
  1374.                         MsgGadgetID = MsgGadget -> GadgetID;
  1375.                     else
  1376.                         MsgGadgetID = -1;
  1377.  
  1378.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1379.                     {
  1380.                         FreeDialList(TRUE);
  1381.  
  1382.                         Done = TRUE;
  1383.                     }
  1384.  
  1385.                     Vanilla = LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget);
  1386.  
  1387.                     switch(Vanilla)
  1388.                     {
  1389.                         case ' ':
  1390.  
  1391.                             if(Selected != -1)
  1392.                             {
  1393.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1394.                                     GTLV_Labels,    ~0,
  1395.                                 TAG_DONE);
  1396.  
  1397.                                 if(Phonebook[Selected] -> Count == -1)
  1398.                                 {
  1399.                                     Phonebook[Selected] -> Count = Count++;
  1400.     
  1401.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1402.     
  1403.                                     LT_PressButton(Handle,GAD_TAG);
  1404.                                 }
  1405.                                 else
  1406.                                 {
  1407.                                     RemoveDialEntry(Selected);
  1408.         
  1409.                                     Count--;
  1410.         
  1411.                                     LT_PressButton(Handle,GAD_UNTAG);
  1412.                                 }
  1413.         
  1414.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1415.                             }
  1416.  
  1417.                             break;
  1418.  
  1419.                         case 127:
  1420.  
  1421.                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  1422.                             {
  1423.                                 if(Count > 0)
  1424.                                 {
  1425.                                     MsgClass    = IDCMP_GADGETUP;
  1426.                                     MsgGadgetID    = GAD_CLEARLIST;
  1427.                                 }
  1428.                             }
  1429.                             else
  1430.                             {
  1431.                                 if(Selected != -1 && Phonebook[Selected] -> Count != -1)
  1432.                                 {
  1433.                                     MsgClass    = IDCMP_GADGETUP;
  1434.                                     MsgGadgetID    = GAD_UNTAG;
  1435.                                 }
  1436.                             }
  1437.  
  1438.                             break;
  1439.                     }
  1440.  
  1441.                     if(MsgClass == IDCMP_GADGETUP)
  1442.                     {
  1443.                         switch(MsgGadgetID)
  1444.                         {
  1445.                             case GAD_TOGGLE_ALL:
  1446.                             {
  1447.                                 LONG LocalCount = 0;
  1448.  
  1449.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1450.                                     GTLV_Labels,    ~0,
  1451.                                 TAG_DONE);
  1452.  
  1453.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1454.                                 {
  1455.                                     if(Phonebook[i] -> Count == -1)
  1456.                                     {
  1457.                                         Phonebook[i] -> Count = LocalCount++;
  1458.  
  1459.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",LocalCount,Phonebook[i] -> Header -> Name);
  1460.                                     }
  1461.                                     else
  1462.                                         RemoveDialEntry(i);
  1463.                                 }
  1464.  
  1465.                                 Count = LocalCount;
  1466.  
  1467.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1468.                                     GTLV_Labels,    PhoneList,
  1469.                                 TAG_DONE);
  1470.  
  1471.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1472.  
  1473.                                 break;
  1474.                             }
  1475.  
  1476.                             case GAD_TAG_ALL:
  1477.  
  1478.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1479.                                     GTLV_Labels,    ~0,
  1480.                                 TAG_DONE);
  1481.  
  1482.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1483.                                 {
  1484.                                     if(Phonebook[i] -> Count == -1)
  1485.                                     {
  1486.                                         Phonebook[i] -> Count = Count++;
  1487.  
  1488.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[i] -> Header -> Name);
  1489.                                     }
  1490.                                 }
  1491.  
  1492.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1493.                                     GTLV_Labels,    PhoneList,
  1494.                                 TAG_DONE);
  1495.  
  1496.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1497.  
  1498.                                 break;
  1499.  
  1500.                             case GAD_TAG:
  1501.  
  1502.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1503.                                     GTLV_Labels,    ~0,
  1504.                                 TAG_DONE);
  1505.  
  1506.                                 Phonebook[Selected] -> Count = Count++;
  1507.  
  1508.                                 SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1509.  
  1510.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1511.                                     GTLV_Labels,    PhoneList,
  1512.                                 TAG_DONE);
  1513.  
  1514.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1515.  
  1516.                                 break;
  1517.  
  1518.                             case GAD_UNTAG:
  1519.  
  1520.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1521.                                     GTLV_Labels,    ~0,
  1522.                                 TAG_DONE);
  1523.  
  1524.                                 RemoveDialEntry(Selected);
  1525.  
  1526.                                 Count--;
  1527.  
  1528.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1529.                                     GTLV_Labels,    PhoneList,
  1530.                                 TAG_DONE);
  1531.  
  1532.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1533.  
  1534.                                 break;
  1535.  
  1536.                             case GAD_NAMELIST:
  1537.  
  1538.                                 Selected = MsgCode;
  1539.  
  1540.                                 if(Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
  1541.                                 {
  1542.                                     if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  1543.                                         ClickAction = CLICK_TOGGLE;
  1544.                                     else
  1545.                                         ClickAction = CLICK_SELECT;
  1546.                                 }
  1547.                                 else
  1548.                                     ClickAction = CLICK_SELECT;
  1549.  
  1550.                                 if(ClickAction == CLICK_TOGGLE)
  1551.                                 {
  1552.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1553.                                         GTLV_Labels,    ~0,
  1554.                                     TAG_DONE);
  1555.  
  1556.                                     if(Phonebook[Selected] -> Count == -1)
  1557.                                     {
  1558.                                         Phonebook[Selected] -> Count = Count++;
  1559.  
  1560.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1561.                                     }
  1562.                                     else
  1563.                                     {
  1564.                                         RemoveDialEntry(Selected);
  1565.  
  1566.                                         Count--;
  1567.                                     }
  1568.  
  1569.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1570.                                         GTLV_Labels,    PhoneList,
  1571.                                     TAG_DONE);
  1572.                                 }
  1573.  
  1574.                                 SetPanelState(Handle,PhoneList,Count,Selected,Released);
  1575.  
  1576.                                 break;
  1577.  
  1578.                             case GAD_CLEARLIST:
  1579.  
  1580.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1581.                                     GTLV_Labels,    ~0,
  1582.                                 TAG_DONE);
  1583.  
  1584.                                 Count = 0;
  1585.  
  1586.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1587.                                 {
  1588.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1589.  
  1590.                                     Phonebook[i] -> Count = -1;
  1591.                                 }
  1592.  
  1593.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1594.                                     GTLV_Labels,    PhoneList,
  1595.                                 TAG_DONE);
  1596.  
  1597.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1598.  
  1599.                                 break;
  1600.  
  1601.                             case GAD_PRINT:
  1602.  
  1603.                                 LT_LockWindow(PhoneWindow);
  1604.  
  1605.                                 PrintPanel(PhoneWindow,PhoneList,Count);
  1606.  
  1607.                                 LT_UnlockWindow(PhoneWindow);
  1608.  
  1609.                                 LT_ShowWindow(Handle,TRUE);
  1610.  
  1611.                                 break;
  1612.  
  1613.                             case GAD_USEIT:
  1614.  
  1615.                                 if(Selected != ~0)
  1616.                                 {
  1617.                                     SaveConfig(Config,PrivateConfig);
  1618.  
  1619.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1620.  
  1621.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1622.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1623.  
  1624.                                     ConfigSetup();
  1625.  
  1626.                                     Done = TRUE;
  1627.  
  1628.                                     ConfigChanged = FALSE;
  1629.                                 }
  1630.  
  1631.                                 break;
  1632.  
  1633.                             case GAD_NEWENTRY:
  1634.  
  1635.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1636.                                     GTLV_Labels,    ~0,
  1637.                                 TAG_DONE);
  1638.  
  1639.                                 if(PhoneList)
  1640.                                 {
  1641.                                     DeletePhoneList(PhoneList);
  1642.  
  1643.                                     PhoneList = NULL;
  1644.                                 }
  1645.  
  1646.                                 if(NewPhoneEntry())
  1647.                                 {
  1648.                                     if(PhoneList = CreatePhoneList())
  1649.                                     {
  1650.                                         Selected = NumPhoneEntries - 1;
  1651.  
  1652.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1653.                                             GTLV_Labels,        PhoneList,
  1654.                                             GTLV_Selected,        Selected,
  1655.                                             GTLV_Top,        Selected,
  1656.                                             GTLV_MakeVisible,    Selected,
  1657.                                         TAG_DONE);
  1658.  
  1659.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1660.  
  1661.                                         LT_Activate(Handle,GAD_NAME);
  1662.  
  1663.                                         RebuildMenu = PhonebookChanged = TRUE;
  1664.                                     }
  1665.                                     else
  1666.                                         goto ClearList;
  1667.                                 }
  1668.                                 else
  1669.                                     goto ClearList;
  1670.  
  1671.                                 break;
  1672.  
  1673.                             case GAD_CLONEENTRY:
  1674.  
  1675.                                 if(Selected != ~0)
  1676.                                 {
  1677.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1678.                                         GTLV_Labels,    ~0,
  1679.                                     TAG_DONE);
  1680.  
  1681.                                     if(PhoneList)
  1682.                                     {
  1683.                                         DeletePhoneList(PhoneList);
  1684.  
  1685.                                         PhoneList = NULL;
  1686.                                     }
  1687.  
  1688.                                     if(NewPhoneEntry())
  1689.                                     {
  1690.                                         if(PhoneList = CreatePhoneList())
  1691.                                         {
  1692.                                             LONG Tmp = Selected,i;
  1693.  
  1694.                                             Selected = NumPhoneEntries - 1;
  1695.  
  1696.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1697.  
  1698.                                             Phonebook[Selected] -> Header -> QuickMenu = FALSE;
  1699.  
  1700.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1701.  
  1702.                                             FreeTimeDateList((struct List *)&Phonebook[Selected] -> TimeDateList);
  1703.  
  1704.                                             CopyTimeDateList((struct List *)&Phonebook[Tmp] -> TimeDateList,(struct List *)&Phonebook[Selected] -> TimeDateList,FALSE);
  1705.  
  1706.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1707.                                                 GTLV_Labels,        PhoneList,
  1708.                                                 GTLV_Selected,        Selected,
  1709.                                                 GTLV_Top,        Selected,
  1710.                                                 GTLV_MakeVisible,    Selected,
  1711.                                             TAG_DONE);
  1712.  
  1713.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1714.  
  1715.                                                 /* Allocate space for the config data. */
  1716.  
  1717.                                             for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
  1718.                                             {
  1719.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1720.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1721.                                             }
  1722.  
  1723.                                                 /* Copy the data. */
  1724.  
  1725.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1726.  
  1727.                                             RebuildMenu = PhonebookChanged = TRUE;
  1728.  
  1729.                                             LT_SetAttributes(Handle,GAD_EDIT,
  1730.                                                 GTLV_Labels,    ~0,
  1731.                                             TAG_DONE);
  1732.  
  1733.                                             UpdateEditList(Phonebook[Selected] -> Config);
  1734.  
  1735.                                             LT_SetAttributes(Handle,GAD_EDIT,
  1736.                                                 GTLV_Labels,    EditList,
  1737.                                             TAG_DONE);
  1738.                                         }
  1739.                                         else
  1740.                                             goto ClearList;
  1741.                                     }
  1742.                                     else
  1743.                                         goto ClearList;
  1744.                                 }
  1745.  
  1746.                                 break;
  1747.  
  1748.                             case GAD_REMOVEENTRY:
  1749.  
  1750.                                 if(Selected != ~0)
  1751.                                 {
  1752.                                     if(Phonebook[Selected] == ChosenEntry)
  1753.                                         MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1754.                                     else
  1755.                                     {
  1756.                                         RebuildMenu = PhonebookChanged = TRUE;
  1757.  
  1758.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1759.                                             GTLV_Labels,~0,
  1760.                                         TAG_DONE);
  1761.  
  1762.                                         if(PhoneList)
  1763.                                         {
  1764.                                             DeletePhoneList(PhoneList);
  1765.  
  1766.                                             PhoneList = NULL;
  1767.                                         }
  1768.  
  1769.                                         if(Phonebook[Selected] -> Count != -1)
  1770.                                         {
  1771.                                             RemoveDialEntry(Selected);
  1772.  
  1773.                                             Count--;
  1774.                                         }
  1775.  
  1776.                                         RemPhoneEntry(Selected);
  1777.  
  1778.                                         if(NumPhoneEntries > 0)
  1779.                                         {
  1780.                                             if(PhoneList = CreatePhoneList())
  1781.                                             {
  1782.                                                 if(Selected == NumPhoneEntries)
  1783.                                                     Selected--;
  1784.  
  1785.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1786.                                                     GTLV_Labels,    PhoneList,
  1787.                                                     GTLV_Selected,    Selected,
  1788.                                                 TAG_DONE);
  1789.                                             }
  1790.                                             else
  1791.                                                 goto ClearList;
  1792.  
  1793.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1794.                                         }
  1795.                                         else
  1796.                                         {
  1797. ClearList:                                        LT_SetAttributes(Handle,GAD_NAMELIST,
  1798.                                                 GTLV_Labels,    &EmptyList,
  1799.                                                 GTLV_Selected,    ~0,
  1800.                                             TAG_DONE);
  1801.  
  1802.                                             Selected = ~0;
  1803.  
  1804.                                             Count = 0;
  1805.  
  1806.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1807.                                         }
  1808.                                     }
  1809.                                 }
  1810.  
  1811.                                 break;
  1812.  
  1813.                             case GAD_NAME:
  1814.  
  1815.                                 if(Selected != ~0)
  1816.                                 {
  1817.                                     strcpy(Phonebook[Selected] -> Header -> Name,(STRPTR)LT_GetAttributes(Handle,GAD_NAME,TAG_DONE));
  1818.  
  1819.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1820.                                         GTLV_Labels,~0,
  1821.                                     TAG_DONE);
  1822.  
  1823.                                     if(PhoneList)
  1824.                                         DeletePhoneList(PhoneList);
  1825.  
  1826.                                     if(PhoneList = CreatePhoneList())
  1827.                                     {
  1828.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1829.                                             GTLV_Labels,        PhoneList,
  1830.                                             GTLV_Selected,        Selected,
  1831.                                             GTLV_Top,        Selected,
  1832.                                             GTLV_MakeVisible,    Selected,
  1833.                                         TAG_DONE);
  1834.                                     }
  1835.  
  1836.                                     if(!Phonebook[Selected] -> Header -> Name[0])
  1837.                                     {
  1838.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1839.                                             GTLV_Labels,    ~0,
  1840.                                         TAG_DONE);
  1841.  
  1842.                                         if(Phonebook[Selected] -> Count != -1)
  1843.                                         {
  1844.                                             RemoveDialEntry(Selected);
  1845.  
  1846.                                             Count--;
  1847.                                         }
  1848.  
  1849.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1850.                                             GTLV_Labels,        PhoneList,
  1851.                                             GTLV_Selected,        Selected,
  1852.                                             GTLV_Top,        Selected,
  1853.                                             GTLV_MakeVisible,    Selected,
  1854.                                         TAG_DONE);
  1855.                                     }
  1856.  
  1857.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1858.  
  1859.                                     RebuildMenu = PhonebookChanged = TRUE;
  1860.  
  1861.                                     if(MsgCode == '\r')
  1862.                                         LT_Activate(Handle,GAD_COMMENT);
  1863.                                 }
  1864.  
  1865.                                 break;
  1866.  
  1867.                             case GAD_COMMENT:
  1868.  
  1869.                                 if(Selected != ~0)
  1870.                                 {
  1871.                                     strcpy(Phonebook[Selected] -> Header -> Comment,(STRPTR)LT_GetAttributes(Handle,GAD_COMMENT,TAG_DONE));
  1872.  
  1873.                                     PhonebookChanged = TRUE;
  1874.  
  1875.                                     if(MsgCode == '\r')
  1876.                                         LT_Activate(Handle,GAD_PHONENUMBER);
  1877.                                 }
  1878.  
  1879.                                 break;
  1880.  
  1881.                             case GAD_QUICKMENU:
  1882.  
  1883.                                 if(Selected != ~0)
  1884.                                 {
  1885.                                     if(Phonebook[Selected] -> Header -> QuickMenu != MsgCode)
  1886.                                     {
  1887.                                         Phonebook[Selected] -> Header -> QuickMenu = MsgCode;
  1888.  
  1889.                                         RebuildMenu = PhonebookChanged = TRUE;
  1890.                                     }
  1891.                                 }
  1892.  
  1893.                                 break;
  1894.  
  1895.                             case GAD_PHONENUMBER:
  1896.  
  1897.                                 if(Selected != ~0)
  1898.                                 {
  1899.                                     strcpy(Phonebook[Selected] -> Header -> Number,(STRPTR)LT_GetAttributes(Handle,GAD_PHONENUMBER,TAG_DONE));
  1900.  
  1901.                                     PhonebookChanged = TRUE;
  1902.  
  1903.                                     if(!Phonebook[Selected] -> Header -> Number[0])
  1904.                                     {
  1905.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1906.                                             GTLV_Labels,    ~0,
  1907.                                         TAG_DONE);
  1908.  
  1909.                                         if(Phonebook[Selected] -> Count != -1)
  1910.                                         {
  1911.                                             RemoveDialEntry(Selected);
  1912.  
  1913.                                             Count--;
  1914.                                         }
  1915.  
  1916.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1917.                                             GTLV_Labels,        PhoneList,
  1918.                                         TAG_DONE);
  1919.                                     }
  1920.  
  1921.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1922.                                 }
  1923.  
  1924.                                 break;
  1925.  
  1926.                             case GAD_LOADLIST:
  1927.  
  1928.                                 LT_LockWindow(PhoneWindow);
  1929.  
  1930.                                 if(ChosenEntry)
  1931.                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1932.                                 else
  1933.                                 {
  1934.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  1935.  
  1936.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1937.                                     {
  1938.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1939.                                             GTLV_Labels,    ~0,
  1940.                                             GTLV_Selected,    ~0,
  1941.                                         TAG_DONE);
  1942.  
  1943.                                         if(PhoneList)
  1944.                                             DeletePhoneList(PhoneList);
  1945.  
  1946.                                         if(!LoadPhonebook(DummyBuffer))
  1947.                                             ShowError(PhoneWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  1948.                                         else
  1949.                                         {
  1950.                                             strcpy(LastPhone,DummyBuffer);
  1951.  
  1952.                                             PhonebookChanged = FALSE;
  1953.  
  1954.                                             RebuildMenu = TRUE;
  1955.                                         }
  1956.  
  1957.                                         if(PhoneList = CreatePhoneList())
  1958.                                         {
  1959.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1960.                                                 GTLV_Labels,    PhoneList,
  1961.                                                 GA_Disabled,    FALSE,
  1962.                                             TAG_DONE);
  1963.  
  1964.                                             FreeDialList(TRUE);
  1965.                                         }
  1966.                                         else
  1967.                                         {
  1968.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1969.                                                 GTLV_Labels,    &EmptyList,
  1970.                                                 GA_Disabled,    TRUE,
  1971.                                             TAG_DONE);
  1972.                                         }
  1973.  
  1974.                                         Selected = ~0;
  1975.  
  1976.                                         Count = 0;
  1977.  
  1978.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1979.  
  1980.                                         FreeAslRequest(FileRequest);
  1981.                                     }
  1982.                                 }
  1983.  
  1984.                                 LT_UnlockWindow(PhoneWindow);
  1985.  
  1986.                                 break;
  1987.  
  1988.                             case GAD_SORTLIST:
  1989.  
  1990.                                 if(NumPhoneEntries > 1)
  1991.                                 {
  1992.                                     RebuildMenu = PhonebookChanged = TRUE;
  1993.  
  1994.                                     LT_LockWindow(PhoneWindow);
  1995.  
  1996.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1997.                                         GTLV_Labels,    ~0,
  1998.                                         GTLV_Selected,    ~0,
  1999.                                     TAG_DONE);
  2000.  
  2001.                                     Selected = ~0;
  2002.  
  2003.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  2004.  
  2005.                                     if(PhoneList)
  2006.                                         DeletePhoneList(PhoneList);
  2007.  
  2008.                                     SortPhoneEntries();
  2009.  
  2010.                                     if(PhoneList = CreatePhoneList())
  2011.                                     {
  2012.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  2013.                                             GTLV_Labels,    PhoneList,
  2014.                                             GTLV_Selected,    ~0,
  2015.                                         TAG_DONE);
  2016.                                     }
  2017.                                     else
  2018.                                         Count = 0;
  2019.  
  2020.                                     LT_UnlockWindow(PhoneWindow);
  2021.                                 }
  2022.  
  2023.                                 break;
  2024.  
  2025.                             case GAD_SAVELIST:
  2026.  
  2027.                                 if(NumPhoneEntries)
  2028.                                 {
  2029.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  2030.  
  2031.                                     LT_LockWindow(PhoneWindow);
  2032.  
  2033.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  2034.                                     {
  2035.                                         if(!SavePhonebook(DummyBuffer))
  2036.                                             ShowError(PhoneWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  2037.                                         else
  2038.                                         {
  2039.                                             strcpy(LastPhone,DummyBuffer);
  2040.  
  2041.                                             PhonebookChanged = FALSE;
  2042.                                         }
  2043.  
  2044.                                         FreeAslRequest(FileRequest);
  2045.                                     }
  2046.  
  2047.                                     LT_UnlockWindow(PhoneWindow);
  2048.                                 }
  2049.  
  2050.                                 break;
  2051.  
  2052.                             case GAD_COPYCONFIG:
  2053.  
  2054.                                 LT_LockWindow(PhoneWindow);
  2055.  
  2056.                                 if(Selected == ~0)
  2057.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  2058.                                 else
  2059.                                 {
  2060.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  2061.  
  2062.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2063.                                         GTLV_Labels,    ~0,
  2064.                                     TAG_DONE);
  2065.  
  2066.                                     UpdateEditList(Phonebook[Selected] -> Config);
  2067.  
  2068.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2069.                                         GTLV_Labels,    EditList,
  2070.                                     TAG_DONE);
  2071.                                 }
  2072.  
  2073.                                 LT_UnlockWindow(PhoneWindow);
  2074.  
  2075.                                 LT_ShowWindow(Handle,TRUE);
  2076.  
  2077.                                 break;
  2078.  
  2079.                             case GAD_PASSWORD:
  2080.  
  2081.                                 LT_LockWindow(PhoneWindow);
  2082.  
  2083.                                 {
  2084.                                     UBYTE SomeBuffer[30];
  2085.  
  2086.                                     memset(SomeBuffer,0,21);
  2087.  
  2088.                                     PhonePasswordUsed = FALSE;
  2089.  
  2090.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
  2091.                                     {
  2092.                                         SomeBuffer[20] = 0;
  2093.  
  2094.                                         PhonebookChanged = TRUE;
  2095.  
  2096.                                         if(SomeBuffer[0])
  2097.                                         {
  2098.                                             UBYTE OtherBuffer[30];
  2099.  
  2100.                                             memset(OtherBuffer,0,21);
  2101.  
  2102.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  2103.                                             {
  2104.                                                 OtherBuffer[20] = 0;
  2105.  
  2106.                                                 if(!memcmp(OtherBuffer,SomeBuffer,20))
  2107.                                                 {
  2108.                                                     Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
  2109.  
  2110.                                                     PhonePasswordUsed = TRUE;
  2111.                                                 }
  2112.                                                 else
  2113.                                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  2114.                                             }
  2115.                                             else
  2116.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  2117.                                         }
  2118.                                     }
  2119.                                 }
  2120.  
  2121.                                 LT_ShowWindow(Handle,TRUE);
  2122.  
  2123.                                 LT_UnlockWindow(PhoneWindow);
  2124.                                 break;
  2125.  
  2126.                             case GAD_EDIT:
  2127.  
  2128.                                 if(Selected != ~0)
  2129.                                 {
  2130.                                     LT_LockWindow(PhoneWindow);
  2131.  
  2132.                                     switch(MsgCode)
  2133.                                     {
  2134.                                         case EDIT_RATES:
  2135.  
  2136.                                             if(Phonebook[Selected] == ChosenEntry)
  2137.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  2138.                                             else
  2139.                                             {
  2140.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  2141.                                                     GTLV_Labels,    ~0,
  2142.                                                 TAG_DONE);
  2143.  
  2144.                                                 PhonebookChanged |= RatePanel(PhoneWindow,PhoneList,Phonebook[Selected],NULL);
  2145.  
  2146.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  2147.                                                     GTLV_Labels,    PhoneList,
  2148.                                                 TAG_DONE);
  2149.                                             }
  2150.  
  2151.                                             break;
  2152.  
  2153.                                         case EDIT_PASSWORD:
  2154.  
  2155.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  2156.                                             break;
  2157.  
  2158.                                         default:
  2159.  
  2160.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,MsgCode,MsgQualifier,PhoneWindow);
  2161.                                             break;
  2162.                                     }
  2163.  
  2164.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2165.                                         GTLV_Labels,    ~0,
  2166.                                     TAG_DONE);
  2167.  
  2168.                                     UpdateEditList(Phonebook[Selected] -> Config);
  2169.  
  2170.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2171.                                         GTLV_Labels,    EditList,
  2172.                                     TAG_DONE);
  2173.  
  2174.                                     LT_UnlockWindow(PhoneWindow);
  2175.  
  2176.                                     LT_ShowWindow(Handle,TRUE);
  2177.                                 }
  2178.  
  2179.                                 break;
  2180.  
  2181.                             case GAD_DIALLIST:
  2182.  
  2183.                                 if(!Count && Selected != ~0)
  2184.                                 {
  2185.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  2186.                                         GTLV_Labels,    ~0,
  2187.                                     TAG_DONE);
  2188.  
  2189.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  2190.  
  2191.                                     Phonebook[Selected] -> Count = Count++;
  2192.  
  2193.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  2194.                                         GTLV_Labels,    PhoneList,
  2195.                                     TAG_DONE);
  2196.                                 }
  2197.  
  2198.                                 if(Count > 0)
  2199.                                 {
  2200.                                     DialTheList    = TRUE;
  2201.                                     Done        = TRUE;
  2202.                                 }
  2203.  
  2204.                                 break;
  2205.                         }
  2206.                     }
  2207.  
  2208.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadgetID == GAD_NAMELIST)
  2209.                     {
  2210.                         if(!(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) && !Online && Phonebook[MsgCode] -> Header -> Number[0])
  2211.                         {
  2212.                             Selected = MsgCode;
  2213.  
  2214.                             LT_SetAttributes(Handle,GAD_NAMELIST,
  2215.                                 GTLV_Labels,    ~0,
  2216.                             TAG_DONE);
  2217.  
  2218.                             Count = 1;
  2219.  
  2220.                             for(i = 0 ; i < NumPhoneEntries ; i++)
  2221.                             {
  2222.                                 if(i != Selected)
  2223.                                 {
  2224.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  2225.  
  2226.                                     Phonebook[i] -> Count = -1;
  2227.                                 }
  2228.                                 else
  2229.                                 {
  2230.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"  1 - %s",Phonebook[i] -> Header -> Name);
  2231.  
  2232.                                     Phonebook[i] -> Count = 0;
  2233.                                 }
  2234.                             }
  2235.  
  2236.                             DialTheList    = TRUE;
  2237.                             Done        = TRUE;
  2238.  
  2239.                             LT_PressButton(Handle,GAD_DIALLIST);
  2240.                         }
  2241.                     }
  2242.                 }
  2243.             }
  2244.             while(!Done);
  2245.  
  2246.             PopWindow();
  2247.         }
  2248.  
  2249.         LT_DeleteHandle(Handle);
  2250.     }
  2251.  
  2252.     if(PhonebookChanged)
  2253.         RebuildMenu = TRUE;
  2254.  
  2255.     FreeDialList(TRUE);
  2256.  
  2257.     if(PhoneList)
  2258.     {
  2259.         if(Count > 0)
  2260.         {
  2261.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  2262.  
  2263.             while(TempNode -> VanillaNode . ln_Succ)
  2264.             {
  2265.                 if(TempNode -> Entry -> Count != -1 && TempNode -> Entry -> Header -> Number[0])
  2266.                     SortToList(TempNode);
  2267.  
  2268.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  2269.             }
  2270.  
  2271.             if(!DialList)
  2272.                 DialTheList = FALSE;
  2273.         }
  2274.  
  2275.         DeletePhoneList(PhoneList);
  2276.     }
  2277.  
  2278.     return(DialTheList);
  2279. }
  2280.